home *** CD-ROM | disk | FTP | other *** search
/ PC Elektro 3 / PC-Elektro-3-cd1.bin / KBan 2.0 / KBANSRC.LZH / SRC / PROG / CMD / STMVLINE.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-07  |  2.5 KB  |  111 lines

  1. /*
  2.  * the class STAGE_MOVE_LINE_CORE
  3.  * Copyright (C) 1996, 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
  4.  */
  5.  
  6. #include "../stdafx.h"
  7.  
  8. #include "../common/bool.h"
  9.  
  10. #include "stmvline.h"
  11.  
  12. void STAGE_MOVE_LINE_CORE::erase_selected_line(KBAN_DRAW& draw)
  13. {
  14.   draw.erase_primitive_line(*m_target);
  15. }
  16.  
  17. void STAGE_MOVE_LINE_CORE::redraw_selected_line(KBAN_DRAW& draw)
  18. {
  19.   draw.draw_primitive_line(*m_target, m_old_active_layer);
  20. }
  21.  
  22. STAGE_MOVE_LINE_CORE::STAGE_MOVE_LINE_CORE(LINE_ELEMENT* target, uint layer, const XY& ac_base)
  23.   : m_target(target),
  24.     m_old_active_layer(layer),
  25.     m_mcur(*target, ac_base),
  26.     m_ac_base(ac_base),
  27.     m_moved(FALSE)
  28. {
  29. }
  30.  
  31. STAGE_MOVE_LINE_CORE::STAGE_MOVE_LINE_CORE(LINE_ELEMENT* target, uint layer, const XY& ac_base, const XY& pc_old)
  32.   : m_target(target),
  33.     m_old_active_layer(layer),
  34.     m_mcur(*target, ac_base),
  35.     m_ac_base(ac_base),
  36.     m_moved(TRUE),
  37.     m_pc_old(pc_old)
  38. {
  39. }
  40.  
  41. STAGE* STAGE_MOVE_LINE_CORE::init(KBAN_INFO& info, KBAN_DRAW& draw)
  42. {
  43.   erase_selected_line(draw);
  44.   if(m_moved.get()) {
  45.     mouse_move(info, draw, m_pc_old, 0);
  46.   } else {
  47.     m_mcur.redraw_cursor(draw);
  48.   }
  49.   return this;
  50. }
  51.  
  52. STAGE* STAGE_MOVE_LINE_CORE::redraw(KBAN_INFO& info, KBAN_DRAW& draw)
  53. {
  54.   erase_selected_line(draw);
  55.   m_mcur.redraw_cursor(draw);
  56.   return this;
  57. }
  58.  
  59. STAGE* STAGE_MOVE_LINE_CORE::mouse_move(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  60. {
  61.   m_moved.set(TRUE);
  62.   m_pc_old = pc;
  63.  
  64.   XY ac;
  65.   info.grid().xy_pc2ac_with_snap_off(pc, ac);
  66.  
  67.   XY ac_dif = ac - m_ac_base;
  68.   if(info.grid().snap_get()) {
  69.     info.grid().snap(ac_dif);
  70.   }
  71.  
  72.   m_mcur.draw_cursor(draw, ac_dif);
  73.   return this;
  74. }
  75.  
  76. STAGE* STAGE_MOVE_LINE_CORE::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  77. {
  78.   m_mcur.erase_cursor(draw);
  79.   XY ac;
  80.   info.grid().xy_pc2ac(pc, ac);
  81.  
  82.   XY ac_dif = ac - m_ac_base;
  83.  
  84.   if(info.grid().snap_get()) {
  85.     info.grid().snap(ac_dif);
  86.   }
  87.  
  88.   m_target->set_ac_s(m_target->ac_s() + ac_dif);
  89.   m_target->set_ac_e(m_target->ac_e() + ac_dif);
  90.   draw.draw_primitive_line(*m_target, m_old_active_layer);
  91.   info.SetModifiedFlag();
  92.   info.new_state().set(true);
  93.   info.new_state_str() = "Move Line";
  94.  
  95.   m_done.set(TRUE);
  96.   return NULL;
  97. }
  98.  
  99. STAGE* STAGE_MOVE_LINE_CORE::mouse_right_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  100. {
  101.   return NULL;
  102. }
  103.  
  104. void STAGE_MOVE_LINE_CORE::end(KBAN_INFO& info, KBAN_DRAW& draw)
  105. {
  106.   if(!m_done.get()) {
  107.     m_mcur.erase_cursor(draw);
  108.     redraw_selected_line(draw);
  109.   }
  110. }
  111.